eventcontroller: Make the target widget available
authorMatthias Clasen <mclasen@redhat.com>
Sun, 16 Feb 2020 07:46:05 +0000 (02:46 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Feb 2020 05:51:02 +0000 (00:51 -0500)
Make it possible for event controllers to obtain
the target widget during handle_event.

gtk/gtkeventcontroller.c
gtk/gtkeventcontrollerprivate.h

index 34594efa46e592e1d61ec5b5ca8f37fd218f0d00..c58d986211ed4e4803660668d5ca01641c2de0e6 100644 (file)
@@ -58,6 +58,7 @@ struct _GtkEventControllerPrivate
   GtkPropagationPhase phase;
   GtkPropagationLimit limit;
   char *name;
+  GtkWidget *target;
 };
 
 G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GtkEventController, gtk_event_controller, G_TYPE_OBJECT)
@@ -323,8 +324,11 @@ gtk_event_controller_handle_event (GtkEventController *controller,
                                    double              y)
 {
   GtkEventControllerClass *controller_class;
+  GtkEventControllerPrivate *priv;
   gboolean retval = FALSE;
 
+  priv = gtk_event_controller_get_instance_private (controller);
+
   g_return_val_if_fail (GTK_IS_EVENT_CONTROLLER (controller), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -333,10 +337,14 @@ gtk_event_controller_handle_event (GtkEventController *controller,
 
   controller_class = GTK_EVENT_CONTROLLER_GET_CLASS (controller);
 
+  priv->target = target;
+
   g_object_ref (controller);
   retval = controller_class->handle_event (controller, event, x, y);
   g_object_unref (controller);
 
+  priv->target = NULL;
+
   return retval;
 }
 
@@ -516,6 +524,14 @@ gtk_event_controller_set_name (GtkEventController *controller,
   priv->name = g_strdup (name);
 }
 
+GtkWidget *
+gtk_event_controller_get_target (GtkEventController *controller)
+{
+  GtkEventControllerPrivate *priv = gtk_event_controller_get_instance_private (controller);
+
+  return priv->target;
+}
+
 static GtkCrossingData *
 gtk_crossing_data_copy (GtkCrossingData *crossing)
 {
index 79a61d0314da0399f814d69e7ebc0e7c234b5bbe..5c2d341611881a41d2d9da1cb9f94368d47acd4a 100644 (file)
@@ -56,4 +56,6 @@ struct _GtkEventControllerClass
   gpointer padding[10];
 };
 
+GtkWidget *gtk_event_controller_get_target (GtkEventController *controller);
+
 #endif /* __GTK_EVENT_CONTROLLER_PRIVATE_H__ */